package com.briup.cms.exception;

import com.briup.cms.util.Result;
import com.briup.cms.util.ResultCode;
import com.briup.cms.util.ResultUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import static com.briup.cms.util.ResultCode.SYSTEM_INNER_ERROR;

/**
 * SpringMVC提供
 * 全局异常处理器：web  service  dao
 * 将整个项目中所有的控制器方法中try catch提取出来，定义当前类中
 */
@Slf4j
@RestControllerAdvice   //通知 增强了web层控制器方法的处理异常的功能
public class GlobalExceptionHandler {
    //自定义业务异常
    @ExceptionHandler(Exception.class)//当所有类型异常发生时，指定调用当前方法
    public Result handleException(Exception ex){
        //每次调试异常信息：打印到控制台中
        ex.printStackTrace();
        //记录错误的日志信息
        log.error(ex.getMessage());

        //如果是业务异常，获取具体异常信息
        if(ex instanceof  CustomException){
            CustomException cex = (CustomException) ex;
            //获取当前异常的具体信息
            ResultCode rc = cex.getResultCode();
            //将异常信息作为统一返回结果显示
            return ResultUtil.error(rc);
        }
        //如果是语法异常：统一返回提示内容：
        return ResultUtil.error(SYSTEM_INNER_ERROR);
    }
}
